package opf5.ui;

import java.awt.Color;
import java.awt.Component;
import java.util.List;

import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;

import opf5.casosDeUso.JugadorDTO;
import opf5.entities.calificaciones.CalculadorPromedios;
import opf5.entities.dominio.Jugador;

public class OPF5TablaJugadores extends OPF5Tabla {
	private static final long serialVersionUID = 1L;
	private List<Jugador> jugadores;

	private void inicializar() {
		table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
		{
		    @Override
		    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
		    {
		        final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
		        if (esJugadorHabilidoso(row))
		        	c.setForeground(Color.BLUE);
		        else
		        	c.setForeground(Color.BLACK);
		        return c;
		    }
		});
		
		ListSelectionModel listSelectionModel = this.table.getSelectionModel();
	    listSelectionModel.addListSelectionListener(new ListSelectionListener() {
			@Override
			public void valueChanged(ListSelectionEvent arg0) {
				mostrarDatosJugador();
			} 	
	    });		
	}

	protected boolean esJugadorHabilidoso(int row) {
		return jugadores.get(row).getHandicap() >= 8;
	}

	public OPF5TablaJugadores() {
		super(new String[] {"Nombre", "Handicap", "Promedio Total"});
		inicializar();
	}

	protected void mostrarDatosJugador() {
		if (this.getIndice() < 0) {
			table.clearSelection();
			VistaDatosJugador.getInstance().ocultar();
		}
		else
			VistaDatosJugador.getInstance().initialize(getJugador());
	}

	private Jugador getJugador() {
		return jugadores.get(this.getIndice());
	}

	public void cargarJugadoresModelo(List<Jugador> jugadores) {
		this.jugadores = jugadores;
		this.limpiar();
		for (Jugador j : jugadores) {
			this.agregarFila(new String[] {
					j.getNombre(),
					Integer.toString(j.getHandicap()),
					Double.toString(CalculadorPromedios.calcularPromedioTotal(j))});
		}
	}

}
